import projectRequest from "@/api";
import type {AxiosRequestConfig} from "axios";

/**
 * @name: utils
 * @data: 2024/4/16 11:33
 */

/**
 * 用于我们写的组件在请求时使用的方法
 * 期中,我们可以传递三个泛型, T,D,P
 * T表示返回结果的类型,
 * D表示data的数据类型
 * P表示params的数据类型
 *
 * @param method 请求方式
 * @param url 请求路径
 * @param data 请求的body数据
 * @param params 请求的query数据
 */


export async function  hyElementRequest<T, D, P>(
  method?: string,
  url?: string,
  data?: D,
  params?: P,
  requestCallback?: Function,
  responseCallback?: Function
) {
  //返回的结果
  let returnResult;
  if (url && url !== "") {
    console.log(209, "可以执行接口");
    // projectRequest.requestCallback(()=>{
    //
    // })
    if (requestCallback) {
      projectRequest.requestCallback((config: AxiosRequestConfig) => {
        requestCallback(config);

        // console.log(36, config);
      });
    }
    /** 开始请求接口 */
   const result = await projectRequest.request({
      method,
      url,
      params,
      data,
    });
   return new Promise((resolve, reject)=>{
     if (responseCallback){
       responseCallback(result);
     }
    resolve(result);
   });
  //   .then((result) => {
    //       returnResult=result;
    //       if (responseCallback){
    //         return responseCallback(result);
    //       }
    //       return result;
    //     });

  } else {
    console.log(211, "return");
    return;
  }
}

/**
 * @description 下载通用方法
 * @param url 下载的路径
 * @param fileName 下载时文件的名称
 */
export function downloadFile(url:string, fileName:string) {
  const link = document.createElement("a");
  link.href=url;
  link.download=fileName;
  link.target="_blank";
  link.click();
}
